package es.ull.etsii.aa.datos;

import java.math.BigDecimal;

public class Etiqueta implements Comparable<Etiqueta> {

	public BigDecimal distanciaRecorrida; // delta
	public int consumicionCamion;         // tau
	public int consumicionTrailer;        // rho
	public Nodo nodoPadre;                // nu
	public Etiqueta etiquetaPadre;        // lambda

	/**
	 * Constructor vacio de Etiqueta
	 */
	public Etiqueta() {

	}

	/**
	 * Realiza una comprobacion de dominancia entre la etiqueta comparadora y la
	 * etiqueta comparada.
	 * 
	 * @param e
	 *            Etiqueta comparada.
	 * @return True, si la etiqueta comparadora domina a la comparada. False, en
	 *         caso contrario.
	 */
	public boolean compruebaDominancia(Etiqueta e) {
		if ((distanciaRecorrida.compareTo(e.distanciaRecorrida) <= 0)
				&& (consumicionCamion <= e.consumicionCamion)
				&& (consumicionTrailer <= e.consumicionTrailer)
				&& ((distanciaRecorrida.equals(e.distanciaRecorrida))
						|| (consumicionCamion == e.consumicionCamion) || (consumicionTrailer == e.consumicionTrailer)))
			return true;

		return false;
	}
	
	@Override
	public boolean equals(Object o) {
		if (o == null)
			return false;
		
		if (o == this)
			return true;
		
		return false;
	}

	@Override
	public int compareTo(Etiqueta o) {
		return distanciaRecorrida.compareTo(o.distanciaRecorrida);
	}
	
	public String toString() {
		StringBuilder sb = new StringBuilder();

		sb.append(this.getClass().getSimpleName());
		sb.append("(delta = " + distanciaRecorrida);
		sb.append(", tau = " + consumicionCamion);
		sb.append(", rho = " + consumicionTrailer);
		
		if (nodoPadre != null)
			sb.append(", nu = " + nodoPadre.getId());
		else
			sb.append(", nu = null");

		sb.append(")");

		return sb.toString();
	}


}
